//计算数字分配的情况的函数，输入total数字以及要求占用的格子数numSlots，返回一个结果数组
export function distribute(total, numSlots) {
    let result = [];

    // 辅助函数，递归地生成所有分配组合
    function findCombinations(n, k, currentCombination) {
        // 当分配完所有的 "total" 时，保存当前的组合
        if (n === 0 && k === numSlots) {
            result.push([...currentCombination]);
            return;
        }

        // 如果递归到最后一个格子并且还没有分配完，停止递归
        if (k === numSlots) return;

        // 递归查找每个格子的分配情况
        for (let i = 0; i <= n; i++) {
            currentCombination[k] = i;
            findCombinations(n - i, k + 1, currentCombination);
        }
    }

    // 初始化一个空的组合数组，并开始递归
    findCombinations(total, 0, new Array(numSlots).fill(0));

    return result;
}

// // 示例：将3分配到5个格子
// const total = 3;
// const numSlots = 5;
// const combinations = distribute(total, numSlots);

// // 输出所有可能的组合，按要求格式化输出
// console.log(`所有可能的分配方式有 ${combinations.length} 种：`);
// combinations.forEach(comb => {
//     console.log(`[ ${comb.join(', ')} ]`);
// });
